package org.jeecg.modules.bpm.service;

import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.task.Task;
import org.jeecg.modules.bpm.dto.ActHiActinstDTO;
import org.jeecg.modules.bpm.dto.TaskDTO;
import org.jeecg.modules.bpm.dto.UserAgentDTO;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;



public interface ActivitiService{
	
	
	/**
	 * 	查询待办任务-只查询用户自己的 (统计总数)
	 * @param userName
	 * @param tsBusConfigs
	 * @param request
	 * @return
	 */
	public Long countPriTodaoTask(String userName,HttpServletRequest request);
	
	/**
	 * 	待办任务列表-组任务(统计总数)
	 * @param roles
	 * @param request
	 * @return
	 */
	public Long countGroupTodoTasks(List<String> roles, HttpServletRequest request);
	
	/**
	 * 	查询待办任务-只查询用户自己的
	 * @param userId
	 * @param tsBusConfigs
	 * @param request 
	 * @return
	 */
	public List<TaskDTO> findPriTodoTasks(String userId,  HttpServletRequest request);
	
	/**
	 * 	待办任务列表-组任务
	 * @param roles
	 * @param request
	 * @return
	 */
	public List<TaskDTO> findGroupTodoTasks(List<String> roles,HttpServletRequest request);
	
	/**
	 * 	查询历史任务
	 * @param userName
	 * @param request 
	 * @return
	 */
	public Page<TaskDTO> findHistoryTasks(Page page,String userName, HttpServletRequest request);
	
	/**
	 * 	查询所有的流程历史
	 * @param request 
	 * @return
	 */
	public Page<TaskDTO> findAllHistoryTasks(Page page,HttpServletRequest request);
	
	/**
	 * 	查询抄送给我的历史任务
	 * @param request 
	 * @return
	 */
	public Page<TaskDTO> findAllCcHistoryTasks(Page page,String username,HttpServletRequest request);

	/**
	 * 	根据任务id查询任务信息
	 * @param taskId
	 * @return
	 */
	public Task getTask(String taskId);
	
	/**
	 * 	查询流程的所有节点
	 * @param taskId
	 * @return
	 */
	public List<Map> getAllTaskNode(String taskId);
	
	/**
	 * 	根据流程processkey获取该流程下已经发布的流程
	 * @param processkey
	 * @return
	 */
	public List<ProcessDefinition> processDefinitionListByProcesskey(String processkey);
	
	/**
	 * 通过任务节点ID，获取当前节点 分支
	 */
	public List getOutTransitions(String taskId) ;
	
	/**
	 * 查询流程的历史任务节点
	 */
	public List<Map<String,Object>> getHistTaskNodeList(String proceInsId);
	
	/**
	 *  获取流程的启动和结束时间
	 * @param proid
	 * @return
	 */
	public List<ActHiActinstDTO> getActHiActinstStartAndEnd(String proceInsId);
	
	/**
	 * 	根据流程实例ID，获取流程的发起人
	 * @param proceInsId
	 * @return
	 */
	public String getProcessStartUserId(String proceInsId);
	
	/**
	 * 根据流程实例ID，获取结束节点处理人
	 * @param proceInsId
	 * @return
	 */
	public List<Map<String,Object>> getProcessEndUserId(String proceInsId);
	
	/**
	 * 	走向流程 【带参数】
	 * @param taskId
	 * @param nextTaskId
	 * @param variables
	 * @throws Exception
	 */
	public void  goProcessTaskNode(String taskId, String nextTaskId, Map<String, Object> variables) throws Exception;

	/**
     *	 指定下一步操作人
     * @param processInstanceId
     * @param taskDefKey
     */
	public String getTaskIdByProins(String proInsId,String taskDefKey);
	
	/**
	 * 	根据历史执行流程实例ID，查询变量内容
	 * @param varName
	 * @param proInsId
	 * @return
	 */
	public String getHisVarinst(String varName,String proInsId);
	
	
	/**
	 * 	查询有效期的代理设置
	 * @return
	 */
	public List<UserAgentDTO> getUserAgent(Date currDate);
	
	/**
	 * 更新流程实例关联业务单据的流程状态
	 * @param procInstId 流程实例id
	 * @param bpmStatus 流程状态
	 */
	public void updateBpmStatus(String procInstId,String bpmStatus);
	
	/**
	 * 流程挂起
	 * @param procInstId
	 */
	public void suspend(String procInstId);
	
	/**
	 * 流程解挂启动
	 * @param procInstId
	 */
	public void restart(String procInstId);
}
